package jsu.ljy.lostandfind.model;

import java.util.Date;

/**
 * 用户实体类
 * 
 * <p>表示系统中的用户信息，包含用户的基本信息和认证信息。
 * 用于用户注册、登录和信息管理。</p>
 * 
 * @author 罗嘉毅
 * @version 1.0
 * @since 2024-03-21
 */
public class User {
    /** 用户ID */
    private Long id;
    
    /** 用户名（登录账号） */
    private String username;
    
    /** 密码（加密存储） */
    private String password;
    
    /** 手机号码 */
    private String phone;
    
    /** 电子邮箱 */
    private String email;
    
    /** 账号创建时间 */
    private Date createTime;

    public User() {}

    /**
     * 获取用户ID
     * @return 用户ID
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置用户ID
     * @param id 用户ID
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取用户名
     * @return 用户名
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置用户名
     * @param username 用户名
     * @throws IllegalArgumentException 当用户名为空或长度不符合要求时抛出
     */
    public void setUsername(String username) {
        if (username == null || username.trim().isEmpty()) {
            throw new IllegalArgumentException("用户名不能为空");
        }
        if (username.length() < 3 || username.length() > 20) {
            throw new IllegalArgumentException("用户名长度必须在3-20个字符之间");
        }
        this.username = username;
    }

    /**
     * 获取密码
     * @return 加密后的密码
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置密码
     * @param password 密码
     * @throws IllegalArgumentException 当密码为空或长度不符合要求时抛出
     */
    public void setPassword(String password) {
        if (password == null || password.trim().isEmpty()) {
            throw new IllegalArgumentException("密码不能为空");
        }
        if (password.length() < 6 || password.length() > 20) {
            throw new IllegalArgumentException("密码长度必须在6-20个字符之间");
        }
        this.password = password;
    }

    /**
     * 获取手机号码
     * @return 手机号码
     */
    public String getPhone() {
        return phone;
    }

    /**
     * 设置手机号码
     * @param phone 手机号码
     * @throws IllegalArgumentException 当手机号格式不正确时抛出
     */
    public void setPhone(String phone) {
        if (phone != null && !phone.trim().isEmpty()) {
            if (!phone.matches("^1[3-9]\\d{9}$")) {
                throw new IllegalArgumentException("手机号格式不正确");
            }
        }
        this.phone = phone;
    }

    /**
     * 获取电子邮箱
     * @return 电子邮箱
     */
    public String getEmail() {
        return email;
    }

    /**
     * 设置电子邮箱
     * @param email 电子邮箱
     * @throws IllegalArgumentException 当邮箱格式不正确时抛出
     */
    public void setEmail(String email) {
        if (email != null && !email.trim().isEmpty()) {
            if (!email.matches("^[A-Za-z0-9+_.-]+@(.+)$")) {
                throw new IllegalArgumentException("邮箱格式不正确");
            }
        }
        this.email = email;
    }

    /**
     * 获取账号创建时间
     * @return 账号创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置账号创建时间
     * @param createTime 账号创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
} 